package org.wiztools.restclient.util; import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import java.util.logging.Level; import java.util.logging.Logger; import org.codehaus.jackson.JsonFactory; import org.codehaus.jackson.JsonGenerator; import org.codehaus.jackson.JsonNode; import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.JsonParser; import org.codehaus.jackson.map.DeserializationConfig; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.util.DefaultPrettyPrinter; /** * * @author subwiz */ public final class JSONUtil { private static final Logger LOG = Logger.getLogger(JSONUtil.class.getName()); private JSONUtil(){} public static class JSONParseException extends Exception{ public JSONParseException(String message){ super(message); } } // Jackson Object Mapper used in indent operation: private static final ObjectMapper jsonObjMapper = new ObjectMapper(); static { jsonObjMapper.enable(DeserializationConfig.Feature.USE_BIG_DECIMAL_FOR_FLOATS); jsonObjMapper.enable(DeserializationConfig.Feature.USE_BIG_INTEGER_FOR_INTS); } public static String indentJSON(final String jsonIn) throws JSONParseException{ JsonFactory fac = new JsonFactory(); try{ JsonParser parser = fac.createJsonParser(new StringReader(jsonIn)); JsonNode node = null; try{ node = jsonObjMapper.readTree(parser); } catch(JsonParseException ex){ throw new JSONParseException(ex.getMessage()); } StringWriter out = new StringWriter(); // Create pretty printer: JsonGenerator gen = fac.createJsonGenerator(out); DefaultPrettyPrinter pp = new DefaultPrettyPrinter(); pp.indentArraysWith(new DefaultPrettyPrinter.Lf2SpacesIndenter()); gen.setPrettyPrinter(pp); // Now write: jsonObjMapper.writeTree(gen, node); gen.flush(); gen.close(); return out.toString(); } catch(IOException ex){ LOG.log(Level.SEVERE, null, ex); } return jsonIn; } }